{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Finding Events <img src='data/images/logo.png' width=50 align='left'> \n",
    "\n",
    "author: Thomas Haslwanter\\\n",
    "date: June-2020"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Signals can be addressed either by explicity selecing specific elements, or by boolean arrays with the same shape as the signal:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[0 1 2 3 4 5 6 7]\n"
     ]
    }
   ],
   "source": [
    "x = np.arange(8)\n",
    "print(x)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[False False False False False False  True  True]\n"
     ]
    }
   ],
   "source": [
    "large = x > 5\n",
    "print(large)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "There are now two ways to address elements of the array *x*:\n",
    "* by index\n",
    "* with a boolean array which has the same size as *x*"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([6, 7])"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "index = range(6,8)\n",
    "x[index]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([6, 7])"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "x[large]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "One of the nice features of boolean indices is that one can combine them:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[False  True False  True False  True False  True]\n"
     ]
    }
   ],
   "source": [
    "odd = (x%2 == 1)\n",
    "print(odd)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([7])"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "x[large & odd]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Interpolation"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Sometimes a higher precision is required than provided by the sampling rate. With smoothly changing values, such an increase in precision can be achieved with *interpolation*:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.collections.LineCollection at 0x1cb89e69ca0>"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "x = np.arange(20)\n",
    "y = x**2 - 20*x + 49\n",
    "plt.plot(x,y, 'o')\n",
    "plt.grid(True)\n",
    "plt.set_ti\n",
    "plt.hlines(0, 0, 20, LineStyle='--')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.collections.LineCollection at 0x1cb89cea910>"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "from scipy.interpolate import CubicSpline\n",
    "cs = CubicSpline(x,y)\n",
    "\n",
    "xi = np.arange(0,20,0.01)\n",
    "yi = cs(xi)\n",
    "\n",
    "# Show the data\n",
    "plt.plot(x,y,'o', label='rawdata')\n",
    "plt.plot(xi, yi, label='interpolated')\n",
    "plt.legend()\n",
    "plt.hlines(0, 0, 20, LineStyle='--')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Find the point where the line crosses zero from below\n",
    "above_zero = yi > 0\n",
    "crossing_point = np.where(np.diff(above_zero*1)==1)[0]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "The signal rises at [17.14] above zero.\n"
     ]
    }
   ],
   "source": [
    "print(f'The signal rises at {xi[crossing_point]} above zero.')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "[5_ImgProc_Example_OpenCV](5_ImgProc_Example_OpenCV.ipynb)<img src=\"data\\images\\Forward_Backward.png\" align='middle'>[8_ParameterFitting](8_ParameterFitting.ipynb)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
